<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::cfg::Static_config_manager&lt; Value_set &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1cfg.html">cfg</a></li><li class="navelem"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">Static_config_manager</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classflow_1_1cfg_1_1Static__config__manager-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::cfg::Static_config_manager&lt; Value_set &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A <code><a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a></code>-related adapter-style class that manages a simple config setup involving a single (though arbitrarily complex) <code><a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>&lt;&gt;</code>-ready raw value <code>struct</code> config store type <code>Value_set</code>, meant to be used only in static fashion.  
 <a href="classflow_1_1cfg_1_1Static__config__manager.html#details">More...</a></p>

<p><code>#include &lt;static_cfg_manager.hpp&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::cfg::Static_config_manager&lt; Value_set &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1cfg_1_1Static__config__manager__inherit__graph.svg" width="194" height="203"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::cfg::Static_config_manager&lt; Value_set &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1cfg_1_1Static__config__manager__coll__graph.svg" width="194" height="203"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a3d2415bc18039b0faeddb7181a8eb61f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">allow_invalid_defaults_tag_t</a> { <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61fab3dc15779c4820ed5ee06299bedf718a">S_ALLOW_INVALID_DEFAULTS</a>
 }</td></tr>
<tr class="memdesc:a3d2415bc18039b0faeddb7181a8eb61f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tag type: indicates an <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> method must <em>allow</em> invalid defaults and only complain if the config source does not explicitly supply a valid value.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">More...</a><br /></td></tr>
<tr class="separator:a3d2415bc18039b0faeddb7181a8eb61f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c117c15e6e00244534099e97d104d35"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3c117c15e6e00244534099e97d104d35">Impl</a> = <a class="el" href="classflow_1_1cfg_1_1Config__manager.html">Config_manager</a>&lt; Value_set, <a class="el" href="structflow_1_1cfg_1_1Null__value__set.html">Null_value_set</a> &gt;</td></tr>
<tr class="memdesc:a3c117c15e6e00244534099e97d104d35"><td class="mdescLeft">&#160;</td><td class="mdescRight">The class we <code>private</code>ly subclass (in HAS-A fashion, not IS-A fashion).  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a3c117c15e6e00244534099e97d104d35">More...</a><br /></td></tr>
<tr class="separator:a3c117c15e6e00244534099e97d104d35"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a77853af82c708377723671c92c6ab948"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a77853af82c708377723671c92c6ab948">Static_config_manager</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">log::Logger</a> *logger_ptr, <a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a> nickname, typename <a class="el" href="classflow_1_1cfg_1_1Option__set.html">Option_set</a>&lt; Value_set &gt;::Declare_options_func &amp;&amp;declare_opts_func_moved)</td></tr>
<tr class="memdesc:a77853af82c708377723671c92c6ab948"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> ready to read static config via <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> and access it via <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a>.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a77853af82c708377723671c92c6ab948">More...</a><br /></td></tr>
<tr class="separator:a77853af82c708377723671c92c6ab948"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacacd2c0eddaf68d0dc5e0c1407572f5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5">apply</a> (const fs::path &amp;cfg_path, const typename <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html">Final_validator_func</a>&lt; Value_set &gt;::Type &amp;final_validator_func)</td></tr>
<tr class="memdesc:aacacd2c0eddaf68d0dc5e0c1407572f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invoke this after construction to load the permanent set of static config from config sources including a static config file.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5">More...</a><br /></td></tr>
<tr class="separator:aacacd2c0eddaf68d0dc5e0c1407572f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44bcca3798f4ce5c86b16d5cbba96f0d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a44bcca3798f4ce5c86b16d5cbba96f0d">apply</a> (<a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">allow_invalid_defaults_tag_t</a>, const fs::path &amp;cfg_path, const typename <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html">Final_validator_func</a>&lt; Value_set &gt;::Type &amp;final_validator_func)</td></tr>
<tr class="memdesc:a44bcca3798f4ce5c86b16d5cbba96f0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to similar <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload without <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag; but skips the stringent check on individual defaults' validity.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a44bcca3798f4ce5c86b16d5cbba96f0d">More...</a><br /></td></tr>
<tr class="separator:a44bcca3798f4ce5c86b16d5cbba96f0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ad094865d998c52348375ffa07c8e70"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a1ad094865d998c52348375ffa07c8e70">apply</a> (const fs::path &amp;cfg_path)</td></tr>
<tr class="memdesc:a1ad094865d998c52348375ffa07c8e70"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to the other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> but with no inter-option validation (meaning the per-option validation passed to constructor is sufficient).  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a1ad094865d998c52348375ffa07c8e70">More...</a><br /></td></tr>
<tr class="separator:a1ad094865d998c52348375ffa07c8e70"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75b77fdd432ed8b254b36687b0cabc48"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a75b77fdd432ed8b254b36687b0cabc48">apply</a> (<a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">allow_invalid_defaults_tag_t</a>, const fs::path &amp;cfg_path)</td></tr>
<tr class="memdesc:a75b77fdd432ed8b254b36687b0cabc48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to similar <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload without <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag; but skips the stringent check on individual defaults' validity.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a75b77fdd432ed8b254b36687b0cabc48">More...</a><br /></td></tr>
<tr class="separator:a75b77fdd432ed8b254b36687b0cabc48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3576d329b71639e6acf38bb7a80e000"><td class="memItemLeft" align="right" valign="top">const Value_set &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000">values</a> () const</td></tr>
<tr class="memdesc:ae3576d329b71639e6acf38bb7a80e000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns (always the same) reference to the managed <code>Value_set</code> structure.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000">More...</a><br /></td></tr>
<tr class="separator:ae3576d329b71639e6acf38bb7a80e000"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a9e86f85d749892c9e55ae74e07e48a35"><td class="memTemplParams" colspan="2">template&lt;typename Value_set &gt; </td></tr>
<tr class="memitem:a9e86f85d749892c9e55ae74e07e48a35"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a9e86f85d749892c9e55ae74e07e48a35">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">Static_config_manager</a>&lt; Value_set &gt; &amp;val)</td></tr>
<tr class="memdesc:a9e86f85d749892c9e55ae74e07e48a35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes (briefly) a <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> to a standard output stream.  <a href="classflow_1_1cfg_1_1Static__config__manager.html#a9e86f85d749892c9e55ae74e07e48a35">More...</a><br /></td></tr>
<tr class="separator:a9e86f85d749892c9e55ae74e07e48a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header related_classflow_1_1cfg_1_1Config__manager"><td colspan="2" onclick="javascript:toggleInherit('related_classflow_1_1cfg_1_1Config__manager')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classflow_1_1cfg_1_1Config__manager.html">flow::cfg::Config_manager&lt; Value_set, Null_value_set &gt;</a></td></tr>
<tr class="memitem:a453d83bf1e8b57b1aaff511fbe913ecc inherit related_classflow_1_1cfg_1_1Config__manager"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1cfg_1_1Config__manager.html#a453d83bf1e8b57b1aaff511fbe913ecc">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1cfg_1_1Config__manager.html">Config_manager</a>&lt; S_d_value_set... &gt; &amp;val)</td></tr>
<tr class="memdesc:a453d83bf1e8b57b1aaff511fbe913ecc inherit related_classflow_1_1cfg_1_1Config__manager"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes (briefly) a Config_manager to a standard output stream.  <a href="classflow_1_1cfg_1_1Config__manager.html#a453d83bf1e8b57b1aaff511fbe913ecc">More...</a><br /></td></tr>
<tr class="separator:a453d83bf1e8b57b1aaff511fbe913ecc inherit related_classflow_1_1cfg_1_1Config__manager"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename Value_set&gt;<br />
class flow::cfg::Static_config_manager&lt; Value_set &gt;</div><p >A <code><a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a></code>-related adapter-style class that manages a simple config setup involving a single (though arbitrarily complex) <code><a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>&lt;&gt;</code>-ready raw value <code>struct</code> config store type <code>Value_set</code>, meant to be used only in static fashion. </p>
<p >That is to say, the parsed config values are not meant to be accessed <em>while</em> the config is being read from file.</p>
<p >If you desire dynamic config (which can be read from file(s) at any time), and/or you need to manage more than one config <code>struct</code> (e.g., you're controlling 2+ entirely separate modules), then please use <a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a> which supports all that. (You can also develop your own handling of <code><a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>&lt;Value_set&gt;</code> instead. See <a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a> doc header.)</p>
<p >The life cycle and usage are simple. Define your <code>Value_set</code> (see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> doc header for formal requirements, but basically you'll need a <code>struct</code>, an option-defining function using <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a>, and possibly an inter-option validator function). Construct the <code><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a>&lt;Value_set&gt;</code>. Call <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> to read a file. (You can do this more than once, potentially for different files. As of this writing only files are supported, but adding command line parsing would be an incremental change.) Then, call <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> to get the reference to the immutable parsed <code>Value_set</code>. This reference can be passed around the application; <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> will always return the same reference. Technically you could call <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> even after using <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a>; but it is not thread-safe to do so while accessing config values which would change concurrently with no protection.</p>
<p >Also you may create a <code>const</code> (immutable) <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> via its constructor and then just use it to output a help message (<a class="el" href="classflow_1_1cfg_1_1Config__manager.html#a0192ddc2cc7302bdc8720ee56a395c02" title="Logs what help_to_ostream() would print.">log_help()</a> or <a class="el" href="classflow_1_1cfg_1_1Config__manager.html#ad5cda6ace05e8bbe52a5129ed1c0720c" title="Prints a human-targeted long-form usage message that includes all options with their descriptions and...">help_to_ostream()</a>). This could be used with your program's <code>--help</code> option or similar, and that's it (no parsing takes place).</p>
<div class="fragment"><div class="line"><span class="comment">// Example of a Static_config_manager created just to log the help, and that&#39;s it.</span></div>
<div class="line"><a class="code hl_class" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager&lt;Static_value_set&gt;</a></div>
<div class="line">  (<a class="code hl_function" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">get_logger</a>(), <span class="stringliteral">&quot;cfg&quot;</span>, &amp;static_cfg_declare_opts)</div>
<div class="line">  .log_help();</div>
<div class="ttc" id="aclassflow_1_1cfg_1_1Static__config__manager_html"><div class="ttname"><a href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a></div><div class="ttdoc">A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...</div><div class="ttdef"><b>Definition:</b> static_cfg_manager.hpp:81</div></div>
<div class="ttc" id="aclassflow_1_1log_1_1Log__context_html_af4db395042b065b00398cd59845dcb4d"><div class="ttname"><a href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">flow::log::Log_context::get_logger</a></div><div class="ttdeci">Logger * get_logger() const</div><div class="ttdoc">Returns the stored Logger pointer, particularly as many FLOW_LOG_*() macros expect.</div><div class="ttdef"><b>Definition:</b> log.cpp:217</div></div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd><a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a> provides the optional <code>commit == false</code> mode in <a class="el" href="classflow_1_1cfg_1_1Config__manager.html#a22bfec8082d0c7b5dff9ee7e98865707" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply_static()</a>; this enables the "multi-source parsing and source skipping" described in its doc header. <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a>, to keep its mission simple, cuts off access to this feature, meaning implicitly it always takes <code>commit</code> to equal <code>true</code>. That is, it is expected you'll be loading static config from exactly one file/one <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> call per attempt. Your <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html#a5475ab0b6e93f2ccded2aa8690ace0a4" title="Short-hand for a function that takes a parsed config set (meaning all values are individually OK) and...">Final_validator_func::Type</a> <code>final_validator_func()</code> <em>should</em> return either <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3a655ec6aa779cb1c799c9ba80f24e9567" title="The holistically-checked cumulative Value_set has no problems and shall be accepted into the candidat...">Final_validator_outcome::S_ACCEPT</a> or <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3aec1a4aed91659725c96b0b8378dba316" title="The holistically-checked cumulative Value_set has invalid contents; the candidate shall be rejected,...">Final_validator_outcome::S_FAIL</a>. It <em>can</em> return <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3ace64a8fc2c16fb21be22f603ef4d2eec" title="The holistically-checked cumulative Value_set has contents such that the validator function decided t...">Final_validator_outcome::S_SKIP</a>, but that would mean <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> will return <code>true</code> (success) but simply no-op (not update the canonical config as returned by <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a>).</dd></dl>
<h3>Rationale</h3>
<p ><a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">Config_manager</a> is in the author's opinion not difficult to use, but it <em>does</em> use template parameter packs (<code>typename... Value_set</code>), and its API can be somewhat difficult to grok when all you have is the aforementioned simple use case.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Value_set</td><td>The settings <code>struct</code> &ndash; see <a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a> doc header for requirements. </td></tr>
  </table>
  </dd>
</dl>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a3c117c15e6e00244534099e97d104d35" name="a3c117c15e6e00244534099e97d104d35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c117c15e6e00244534099e97d104d35">&#9670;&nbsp;</a></span>Impl</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::Impl =  <a class="el" href="classflow_1_1cfg_1_1Config__manager.html">Config_manager</a>&lt;Value_set, <a class="el" href="structflow_1_1cfg_1_1Null__value__set.html">Null_value_set</a>&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The class we <code>private</code>ly subclass (in HAS-A fashion, not IS-A fashion). </p>
<p >It is <code>public</code> basically so that we can refer to it in various forwarding <code>using</code> method directives below. </p>

</div>
</div>
<h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a3d2415bc18039b0faeddb7181a8eb61f" name="a3d2415bc18039b0faeddb7181a8eb61f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d2415bc18039b0faeddb7181a8eb61f">&#9670;&nbsp;</a></span>allow_invalid_defaults_tag_t</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">flow::cfg::Static_config_manager::allow_invalid_defaults_tag_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tag type: indicates an <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> method must <em>allow</em> invalid defaults and only complain if the config source does not explicitly supply a valid value. </p>
<p >Otherwise the defaults themselves are also stringently checked regardless of whether they are overridden. This setting applies only to individual-option-validators. <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html" title="Utility/traits type to concisely work with final-validation functions when calling methods like Confi...">Final_validator_func</a> validation is orthogonal to this. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a3d2415bc18039b0faeddb7181a8eb61fab3dc15779c4820ed5ee06299bedf718a" name="a3d2415bc18039b0faeddb7181a8eb61fab3dc15779c4820ed5ee06299bedf718a"></a>S_ALLOW_INVALID_DEFAULTS&#160;</td><td class="fielddoc"><p >Sole value for tag type <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a>. </p>
</td></tr>
</table>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a77853af82c708377723671c92c6ab948" name="a77853af82c708377723671c92c6ab948"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77853af82c708377723671c92c6ab948">&#9670;&nbsp;</a></span>Static_config_manager()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::Static_config_manager </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Logger.html">log::Logger</a> *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ae4dc52186797094b3040379ff19124c9">util::String_view</a>&#160;</td>
          <td class="paramname"><em>nickname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">typename <a class="el" href="classflow_1_1cfg_1_1Option__set.html">Option_set</a>&lt; Value_set &gt;::Declare_options_func &amp;&amp;&#160;</td>
          <td class="paramname"><em>declare_opts_func_moved</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs a <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> ready to read static config via <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> and access it via <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a>. </p>
<h3>Logging assumption</h3>
<p ><code>*logger_ptr</code> is a standard logging arg. Note, though, that the class will assume that log verbosity may not have yet been configured &ndash; since this <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> may be the thing configuring it. Informal recommendations:</p><ul>
<li>You should let through INFO and WARNING messages in <code>*logger_ptr</code>.</li>
<li>If you plan to use <code>*this</code> only for <a class="el" href="classflow_1_1cfg_1_1Config__manager.html#a0192ddc2cc7302bdc8720ee56a395c02" title="Logs what help_to_ostream() would print.">log_help()</a> (such as in your <code>--help</code> implementation), you should <em>not</em> let through TRACE-or-more-verbose.</li>
<li>Once (and if) you engage any actual parsing (<a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>), TRACE may be helpful in debugging as usual.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>Logger to use for subsequently logging. </td></tr>
    <tr><td class="paramname">nickname</td><td>Brief string used for logging subsequently. </td></tr>
    <tr><td class="paramname">declare_opts_func_moved</td><td>The declare-options callback as required by <code><a class="el" href="classflow_1_1cfg_1_1Option__set.html" title="The core config-parsing facility, which builds parsing/comparison/output capabilities on top of a giv...">Option_set</a>&lt;Value_set&gt;</code> constructor; see its doc header for instructions. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a75b77fdd432ed8b254b36687b0cabc48" name="a75b77fdd432ed8b254b36687b0cabc48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75b77fdd432ed8b254b36687b0cabc48">&#9670;&nbsp;</a></span>apply() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::apply </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">allow_invalid_defaults_tag_t</a>&#160;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const fs::path &amp;&#160;</td>
          <td class="paramname"><em>cfg_path</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Identical to similar <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload without <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag; but skips the stringent check on individual defaults' validity. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> doc header and/or return-value doc just below.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">cfg_path</td><td>See other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>. However the latter will return <code>false</code> if a default is invalid, even if file <code>cfg_path</code> explicitly sets it to a valid value. This tagged overload will not. </dd></dl>

</div>
</div>
<a id="a44bcca3798f4ce5c86b16d5cbba96f0d" name="a44bcca3798f4ce5c86b16d5cbba96f0d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44bcca3798f4ce5c86b16d5cbba96f0d">&#9670;&nbsp;</a></span>apply() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::apply </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f">allow_invalid_defaults_tag_t</a>&#160;</td>
          <td class="paramname">, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const fs::path &amp;&#160;</td>
          <td class="paramname"><em>cfg_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const typename <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html">Final_validator_func</a>&lt; Value_set &gt;::Type &amp;&#160;</td>
          <td class="paramname"><em>final_validator_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Identical to similar <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload without <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag; but skips the stringent check on individual defaults' validity. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> doc header and/or return-value doc just below.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">cfg_path</td><td>See other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>. </td></tr>
    <tr><td class="paramname">final_validator_func</td><td>See other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>. However the latter will return <code>false</code> if a default is invalid, even if file <code>cfg_path</code> explicitly sets it to a valid value. This tagged overload will not. </dd></dl>

</div>
</div>
<a id="a1ad094865d998c52348375ffa07c8e70" name="a1ad094865d998c52348375ffa07c8e70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ad094865d998c52348375ffa07c8e70">&#9670;&nbsp;</a></span>apply() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::apply </td>
          <td>(</td>
          <td class="paramtype">const fs::path &amp;&#160;</td>
          <td class="paramname"><em>cfg_path</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to the other <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> but with no inter-option validation (meaning the per-option validation passed to constructor is sufficient). </p>
<p >See also <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload with <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">cfg_path</td><td>File to read. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if and only if successfully parsed config source(s) and validated all settings; and defaults were also all individually valid. </dd></dl>

</div>
</div>
<a id="aacacd2c0eddaf68d0dc5e0c1407572f5" name="aacacd2c0eddaf68d0dc5e0c1407572f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aacacd2c0eddaf68d0dc5e0c1407572f5">&#9670;&nbsp;</a></span>apply() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::apply </td>
          <td>(</td>
          <td class="paramtype">const fs::path &amp;&#160;</td>
          <td class="paramname"><em>cfg_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const typename <a class="el" href="structflow_1_1cfg_1_1Final__validator__func.html">Final_validator_func</a>&lt; Value_set &gt;::Type &amp;&#160;</td>
          <td class="paramname"><em>final_validator_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Invoke this after construction to load the permanent set of static config from config sources including a static config file. </p>
<p >See also <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> overload with <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#a3d2415bc18039b0faeddb7181a8eb61f" title="Tag type: indicates an apply() method must allow invalid defaults and only complain if the config sou...">allow_invalid_defaults_tag_t</a> tag.</p>
<p >After this runs and succeeds, you may use <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> to access the loaded values (but see notes on <code>final_validator_func</code> arg and return value, regarding <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3ace64a8fc2c16fb21be22f603ef4d2eec" title="The holistically-checked cumulative Value_set has contents such that the validator function decided t...">Final_validator_outcome::S_SKIP</a> w/r/t <code>final_validator_func</code> arg).</p>
<p >On failure returns <code>false</code>; else returns <code>true</code>. In the former case the overall state is equal to that at entry to the method. Tip: On failure you may want to exit program with error; or you can continue knowing that <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> will return default values according to <code>Value_set()</code> no-arg ctor. WARNING(s) logged given failure.</p>
<p >Before <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a>, or after it fails, the contents of what <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> returns will be the defaults from your <code>Value_set</code> structure in its constructed state. This may or may not have utility depending on your application.</p>
<p ><a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> will <em>not</em> be tolerant of unknown option names appearing in the config source.</p>
<dl class="section note"><dt>Note</dt><dd><code>final_validator_func()</code> can be made quite brief by using convenience macro <a class="el" href="cfg__manager__fwd_8hpp.html#a1e8c66781034dd50ad8e2de9c0c47e0e" title="Convenience macro particularly useful in the final_validator_func() callback taken by various Config_...">FLOW_CFG_OPT_CHECK_ASSERT()</a>. This will take care of most logging in most cases.</dd></dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000011">Todo:</a></b></dt><dd>Add support for command line as a config source in addition to file(s), for static config in <a class="el" href="classflow_1_1cfg_1_1Config__manager.html" title="Manages a config setup, intended for a single daemon process, by maintaining 1 or more set(s) of stat...">cfg::Config_manager</a>.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">cfg_path</td><td>File to read. </td></tr>
    <tr><td class="paramname">final_validator_func</td><td>If parsing and individual-option-validation succeed, the method shall return success if <code>final_validator_func(V)</code> returns <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3a655ec6aa779cb1c799c9ba80f24e9567" title="The holistically-checked cumulative Value_set has no problems and shall be accepted into the candidat...">Final_validator_outcome::S_ACCEPT</a> or <a class="el" href="namespaceflow_1_1cfg.html#a80b3319f3d3a657837d0d8b28d22ccc3ace64a8fc2c16fb21be22f603ef4d2eec" title="The holistically-checked cumulative Value_set has contents such that the validator function decided t...">Final_validator_outcome::S_SKIP</a>, where V is the parsed <code>Value_set</code>; and in the former case <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> post-this-method will return V. Informally: Please place individual-option validation into <a class="el" href="option__set_8hpp.html#ae6bc0bcf28a53682a4c9a5fbe3a3837f" title="Macro the user must use, as prescribed in the flow::cfg::Option_set constructor doc header discussing...">FLOW_CFG_OPTION_SET_DECLARE_OPTION()</a> invocations; only use <code>final_validator_func()</code> for internal consistency checks (if any). Informally: It is unlikely, with <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a>, that it should return SKIP; that feature is only useful with the multi-file-update feature which is not accessible through <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a>. See the note about this in our class doc header. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if and only if successfully parsed config source and validated all settings including <code>final_validator_func() != S_FAIL</code>; and defaults were also all individually valid. If <code>true</code>, and <code>final_validator_func() == S_ACCEPT</code>, then <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> shall return the parsed <code>Value_set</code>. If <code>true</code>, but <code>final_validator_func() == S_SKIP</code>, then <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#ae3576d329b71639e6acf38bb7a80e000" title="Returns (always the same) reference to the managed Value_set structure.">values()</a> shall return the default-cted <code>Value_set</code> </dd></dl>

</div>
</div>
<a id="ae3576d329b71639e6acf38bb7a80e000" name="ae3576d329b71639e6acf38bb7a80e000"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3576d329b71639e6acf38bb7a80e000">&#9670;&nbsp;</a></span>values()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">const Value_set &amp; <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">flow::cfg::Static_config_manager</a>&lt; Value_set &gt;::values</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns (always the same) reference to the managed <code>Value_set</code> structure. </p>
<p >Before successful <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html#aacacd2c0eddaf68d0dc5e0c1407572f5" title="Invoke this after construction to load the permanent set of static config from config sources includi...">apply()</a> these values will be at their defaults. Tip: It should be sufficient to pass around only the <code>const</code> ref obtained here all around the app &ndash; no <code>Value_set</code> copying should be needed.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. To reiterate: always the same reference is returned. </dd></dl>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a9e86f85d749892c9e55ae74e07e48a35" name="a9e86f85d749892c9e55ae74e07e48a35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e86f85d749892c9e55ae74e07e48a35">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Value_set &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html">Static_config_manager</a>&lt; Value_set &gt; &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Serializes (briefly) a <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> to a standard output stream. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Value_set</td><td>See <a class="el" href="classflow_1_1cfg_1_1Static__config__manager.html" title="A Config_manager-related adapter-style class that manages a simple config setup involving a single (t...">Static_config_manager</a> doc header. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to serialize. </td></tr>
    <tr><td class="paramname">val</td><td>Value to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>cfg/<a class="el" href="cfg__manager__fwd_8hpp.html">cfg_manager_fwd.hpp</a></li>
<li>cfg/<a class="el" href="static__cfg__manager_8hpp.html">static_cfg_manager.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
